package com.sfgeeq.quartz;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Created by Administrator on 2018/8/7.
 */
public class HelloScheduler {
    public static void main(String[] args) {
//        JobDetail name 任务的名字 、group 任务的组别  、jobClass JOB的实现类[HelloJob.class]  、jobDataMap 传参的作用
//        创建一个JobDetai实例，将该实例与HelloJob类进行绑定操作，并设置定时任务名myjob 设置组名：group1
        JobDetail jobDetail= JobBuilder.newJob(HelloJob.class).usingJobData("message","定时任务名称").withIdentity("myjob","group1").build();//链式写法
        System.out.println("jobDetail name[定时任务的名称]:"+jobDetail.getKey().getName());
        System.out.println("jobDetail group[定时任务组别 不写默认为：DEFAULT]:"+jobDetail.getKey().getGroup());
        System.out.println("jobDetail jobClass[]:"+jobDetail.getJobClass().getName());
//        在进行任务调试时JobDataMap存储在JobExecutionContext中，非常方便获取
//        JobDataMap可以用来装载任何可序列化的数据对象，当job实例对象被执行时，这些参数对象传背递给它
//        JobDataMap实现了JDK的MAP接口，添加了一些非常方便的方法来存取基本数据类型。




//        trigger是触发器
//        创建一个Trigger实例，定时job立刻执行   build 是构建的意思
//        TriggerBuilder newTrigger   new了一个trigger
        //withIdentity   给当前的这个trigger设置标识符：myTrigger 和组名：group1
        //startNow      表示立刻执行
//        withSchedule  设置执行的频率
//        SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()   2秒钟执行一次
//        build 最后调用build 将Trigger创建出来。
//        Trigger trigger= TriggerBuilder.newTrigger().withIdentity("myTrigger","group1").usingJobData("triggerMessage","Trigger名称").startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();

//        /**
//         * 4秒后执行一次任务
//         */
//        Date start=new Date();
//        start.setTime(start.getTime()+4000l);
//        SimpleTrigger strigger= (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("myTrigger").startAt(start).build();

//        /**
//         * 4秒后首次执行任务，之后每隔两秒钟，重复执行一次任务
//         * SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).withRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY)
//         * 每隔2秒，执行无数次
//         */
//        Date start=new Date();
//        start.setTime(start.getTime()+4000l);
//        SimpleTrigger strigger= (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("myTrigger").startAt(start)
//                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).withRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY))
//                .build();
//        /**
//         * 获取距离当前时间6秒之后的停止任务
//         */
//        Date endDate=new Date();
//        endDate.setTime(endDate.getTime()+6000l);
//        SimpleTrigger strigger= (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("myTrigger")
//                .startAt(new Date())//开始执行的时间
//                .endAt(endDate)//结束执行的时间
//                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).withRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY))
//                .build();
        /**
         * 每秒执行一次
         */
//        使用corn表达式来定义一个任务
        CronTrigger trigger=(CronTrigger) TriggerBuilder.newTrigger()
                .withIdentity("myTrigger")
                .withSchedule(
                        CronScheduleBuilder.cronSchedule("* * * * * ? *")
                )
                .build();

        //        创建scheduler实例  调度器11
        SchedulerFactory sfact=new StdSchedulerFactory();
        Scheduler scheduler = null;
        try {
            scheduler = sfact.getScheduler();
            scheduler.start();
            SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println("当前的系统时间为："+sf.format(new Date()));

            scheduler.scheduleJob(jobDetail,trigger);
        } catch (SchedulerException e) {
            e.printStackTrace();
        }



    }
}
